package model

type AlbumInfo struct {
	Id                      int64                      `json:"Id,omitempty"`
	AlbumIntro              string                     `json:"albumIntro,omitempty"`
	AlbumTitle              string                     `json:"albumTitle,omitempty"`
	Category3Id             int64                      `json:"category3Id,omitempty"`
	CoverUrl                string                     `json:"coverUrl,omitempty"`
	Discount                string                     `json:"discount,omitempty"`
	IsOpen                  string                     `json:"isOpen,omitempty"`
	PayType                 string                     `json:"payType,omitempty"`
	Price                   string                     `json:"price,omitempty"`
	PriceType               string                     `json:"priceType,omitempty"`
	VipDiscount             string                     `json:"vipDiscount,omitempty"`
	UserId                  int64                      `json:"userId,omitempty"`
	TracksForFree           int64                      `json:"tracksForFree,omitempty"`
	SecondsForFree          int64                      `json:"secondsForFree,omitempty"`
	BuyNotes                string                     `json:"buyNotes,omitempty"`
	SellingPoint            string                     `json:"sellingPoint,omitempty"`
	Status                  string                     `json:"status,omitempty"`
	PlayStatNum             int64                      `json:"playStatNum,omitempty"`
	SubscribeStatNum        int64                      `json:"subscribeStatNum,omitempty"`
	BuyStatNum              int64                      `json:"buyStatNum,omitempty"`
	CommentStatNum          int64                      `json:"commentStatNum,omitempty"`
	CreateTime              string                     `json:"createTime,omitempty"`
	Category1Id             int64                      `json:"category1Id,omitempty"`
	Category2Id             int64                      `json:"category2Id,omitempty"`
	HotScore                float64                    `json:"hotScore"`
	AnnouncerName           string                     `json:"announcerName,omitempty"`
	IncludeTrackCount       int64                      `json:"includeTrackCount,omitempty"`
	AttributeValueIndexList []*AttributeValueIndexList `json:"attributeValueIndexList,omitempty"`
}
type AttributeValueIndexList struct {
	AttributeId int64 `json:"attributeId"`
	ValueId     int64 `json:"valueId"`
}
type SuggestInfo struct {
	Id              int64    `json:"id"`
	Keyword         []string `json:"keyword,omitempty"`
	Title           string   `json:"title,omitempty"`
	KeywordPinyin   []string `json:"keywordPinyin,omitempty"`
	KeywordSequence []string `json:"keywordSequence"`
}

// ElasticsearchIndexSettings 代表Elasticsearch索引的设置部分
type ElasticsearchIndexSettings struct {
	Analysis Analysis `json:"analysis"`
}

// Analysis 包含分析器的定义
type Analysis struct {
	Analyzer map[string]AnalyzerDef `json:"analyzer"`
}

// AnalyzerDef 定义了一个分析器
type AnalyzerDef struct {
	Type string `json:"type"`
}

// ElasticsearchIndexMappings 代表Elasticsearch索引的映射部分
type ElasticsearchIndexMappings struct {
	Properties PropertyDefinitions `json:"properties"`
}

// PropertyDefinitions 包含多个字段的定义
type PropertyDefinitions struct {
	ID              FieldDefinition `json:"id"`
	Title           FieldDefinition `json:"title"`
	Keyword         CompletionField `json:"keyword"`
	KeywordPinyin   CompletionField `json:"keywordPinyin"`
	KeywordSequence CompletionField `json:"keywordSequence"`
}

// FieldDefinition 代表一个普通字段的定义
type FieldDefinition struct {
	Type     string `json:"type"`
	Analyzer string `json:"analyzer,omitempty"` // Analyzer是可选的，所以使用omitempty
}

// CompletionField 代表一个completion字段的定义
type CompletionField struct {
	Type           string `json:"type"`
	Analyzer       string `json:"analyzer"`
	SearchAnalyzer string `json:"search_analyzer"`
	MaxInputLength int    `json:"max_input_length"`
}

// ElasticsearchIndex 代表整个Elasticsearch索引的定义
type ElasticsearchIndex struct {
	Settings ElasticsearchIndexSettings `json:"settings"`
	Mappings ElasticsearchIndexMappings `json:"mappings"`
}
